package io;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**缓存输出流写出数据的缓冲区问题*/
public class FlushDemo {
    public static void main(String[] args) throws IOException {
    FileOutputStream fos= new FileOutputStream("bos.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
       String str = "我们之间的回忆,全部都小心的收集,我总是偷偷的哭泣，像倦鸟失去了归期，但愿我相信的爱情，结局是握在我手心";
       byte[]data = str.getBytes(StandardCharsets.UTF_8);
       bos.write(data);
       // bos.close();
       bos.flush();//刷新缓冲区  即时 写出数据    将缓冲区中已经缓存的数据一次性写出
                   //flush()方法是所有输出流都具备的方法，因为该方法是在接口Flushable中定义的，而输出流超类OutputStream实现了该接口，所以所有输出流都有flush()方法
                   //但是除了缓冲输出流以外，其他高级流的flush()方法的作用都是为了调用连接的流的flush()方法
                   //目的是将flush()方法向下传递，最终传到缓冲输出流，做清空缓冲区操作
       System.out.println("数据写出完毕!");
                  //缓冲输出流可以提高写出效率，写出数据缺乏即时性。当字节未满时，数据会保存在缓冲区中，等到缓冲区满了，才会将数据写出。
                  // 当需要在执行完某个写出程序后，希望将数据确实写出，而非在缓冲区中保存
                  //直到缓冲区充满后才写出。
                  //void flush()
                  //清空缓冲区,将缓冲区的数据强制写出
    }
}
